class Solution191:
    """
    位1的个数
    使用n&(n-1)消除最低位1的方法计算1的个数
    """

    def hamming_weight(self, n: int) -> int:
        count = 0
        while n > 0:
            n &= (n - 1)
            count += 1
        return count


class Solution231:
    """
    2的幂
    如果一个数为2的幂，则它的二进制数中只有一个1
    故使用消除最低位1的方法，n&(n-1)的结果应该为0，不为0则不是2的幂
    """

    def is_power_of_two(self, n: int) -> bool:
        if n <= 0:
            return False

        if not (n & (n - 1)):
            return True
        return False


class Solution190:
    """
    跟10进制数颠倒很类似: ret = (ret * 10) + (ret % 10); n = n // 10
    使用二进制位运算
    """
    def reverse_bits(self, n: int) -> int:
        ret = 0
        for i in range(32):
            # ret = (ret * 2) + (n % 2)
            ret = (ret >> 1) + (n & 1)
            # n = n // 2
            n >>= 1
        return ret


if __name__ == '__main__':
    print(Solution190().reverse_bits(2))
